﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using Microsoft.Win32;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;
using Voluntariar.Sistema.DAO;
using Voluntariar.Sistema.Entidades;
using Voluntariar.WEB.Util;

namespace Voluntariar.WEB.Controls
{
	public partial class BuscaCep : System.Web.UI.UserControl
	{

		#region Atributo

		public string Cep
		{
			get { return this.txtCEP.Text; }
			set { this.txtCEP.Text = value; }
		}

		public string Rua
		{
			get { return this.txtRua.Text; }
			set { this.txtRua.Text = value; }
		}

		public string Bairro
		{
			get { return this.txtBairro.Text; }
			set { this.txtBairro.Text = value; }
		}

		public string Cidade
		{
			get { return this.txtCidade.Text; }
			set { this.txtCidade.Text = value; }
		}

		public string Estado
		{
			get { return this.txtEstado.Text; }
			set { this.txtEstado.Text = value; }
		}

		public string EnderecoCompleto
		{
			get { return Rua + " ," + Bairro + " ," + Cidade + " ," + Estado; }
			set { Rua = value; }
		}

		public int Width
		{
			get { return Convert.ToInt32(this.pnlBuscaCEP.Width); }
			set { this.pnlBuscaCEP.Width = Unit.Percentage(value); }
		}

		#endregion

		#region Eventos

		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				PreencheTela();
			}
		}

		protected void lnbSalvar_OnClick(object sender, EventArgs e)
		{
			try
			{
				Enderecos end = new Enderecos();
				end.CEP = txtCEP.Text;
				end.logradouro = txtRua.Text;
				end.numero = Convert.ToInt32(txtNumero.Text);
				end.complemento = txtComplemento.Text;
				end.bairro = txtBairro.Text;
				end.cidade = txtCidade.Text;
				end.estado = txtEstado.Text;

				new EnderecosDAO().Salvar(end);

			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		protected void lnbLimpar_OnClick(object sender, EventArgs e)
		{
			try
			{
				txtCEP.Text = string.Empty;
				txtRua.Text = string.Empty;
				txtNumero.Text = string.Empty;
				txtComplemento.Text = string.Empty;
				txtBairro.Text = string.Empty;
				txtCidade.Text = string.Empty;
				txtEstado.Text = string.Empty;

			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		protected void btnConsultar_Click(object sender, EventArgs e)
		{
			try
			{

				txtCEP.Text = txtCEP.Text.Replace(".", "").Replace("-", "").Replace("_", "");
				WebRequest request =
						WebRequest.Create("http://m.correios.com.br/movel/buscaCepConfirma.do?cepEntrada=" + txtCEP.Text +
															"&tipoCep=&cepTemp=&metodo=buscarCep");
				/*RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
				registry.SetValue("ProxyEnable", 0);
				RegistryKey registry2 = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", true);
				registry2.DeleteValue("DefaultConnectionSettings", false);
				registry2.DeleteValue("SavedLegacySettings", false);

				request.Proxy = WebRequest.GetSystemWebProxy();*/

				//WebProxy myProxy = new WebProxy();
				//Uri newUri = new Uri("http://prx-ici.ici.curitiba.org.br:8080");
				//// Associate the newUri object to 'myProxy' object so that new myProxy settings can be set.
				//myProxy.Address = newUri;
				//// Create a NetworkCredential object and associate it with the 
				//// Proxy property of request object.
				//myProxy.Credentials = new NetworkCredential("luizfsantos", "blaster25");
				//request.Proxy = myProxy;

				HttpWebResponse resposta = (HttpWebResponse)request.GetResponse();

				StreamReader stream = new StreamReader(resposta.GetResponseStream(), Encoding.GetEncoding("ISO-8859-1"));

				string dados = stream.ReadToEnd();
				int count = 0;
				string ExpressaoRegular = "<span class=\"respostadestaque\">(.*?)</span>";
				string ExpressaoRegularA = "<div class=\"erro\">(.*?)</div>";
				MatchCollection endereco = Regex.Matches(dados, ExpressaoRegular,
						RegexOptions.Singleline | RegexOptions.IgnoreCase);
				MatchCollection enderecoErro = Regex.Matches(dados, ExpressaoRegularA,
						RegexOptions.Singleline | RegexOptions.IgnoreCase);

				foreach (Match resultado in endereco)
				{
					count++;

					switch (count)
					{
						case 1:
							string[] palavras = RemoverCaracteres(resultado.Groups[1].Value).Split(Convert.ToChar(" "));
							txtRua.Text = palavras[0].ToString();
							txtRua.Text += " " +
														 RemoverCaracteresRua(resultado.Groups[1].Value)
																 .Substring(palavras[0].ToString().Length)
																 .Trim();

							break;
						case 2:
							txtBairro.Text = RemoverCaracteres(resultado.Groups[1].Value);

							break;
						case 3:
							try
							{
								txtEstado.Text = RemoverCaracteres(resultado.Groups[1].Value.Trim().Split('/')[1]);
								txtCidade.Text = RemoverCaracteres(resultado.Groups[1].Value.Trim().Split('/')[0]);
							}
							catch (Exception)
							{
								Mensagem.Alerta("CEP Não Encontrado");
							}
							break;
					}
				}
				foreach (Match resultado in enderecoErro)
				{
					count++;

					switch (count)
					{
						case 1:
							string[] palavras = RemoverCaracteres(resultado.Groups[1].Value).Split(Convert.ToChar(" "));
							string erro = palavras[0].ToString();
							erro += " " +
											RemoverCaracteres(resultado.Groups[1].Value)
													.Substring(palavras[0].ToString().Length)
													.Trim();
							Mensagem.Alerta(
									erro.Replace(" nao ", " não ").Replace("<br>", "").Replace("<br/>", ""));
							break;
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}

		}

		#endregion

		#region Métodos

		private void PreencheTela()
		{
			try
			{
				if (Util.Sessao.ObjUsuario.Enderecos.ID > 0)
				{

				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		private string RemoverCaracteres(string texto)
		{
			string resultado = texto;

			resultado = resultado.Replace("\n", "");
			resultado = resultado.Replace("\r", "");
			resultado = resultado.Replace("\t", "");
			resultado = resultado.Trim();

			return resultado;
		}

		private string RemoverCaracteresRua(string texto)
		{
			string resultado = texto;
			string rua = string.Empty;
			string aux = string.Empty;

			resultado = resultado.Replace("\n", "");
			resultado = resultado.Replace("\r", "");
			resultado = resultado.Replace("\t", "");
			resultado = resultado.Trim();

			if (resultado.Contains("-"))
			{

				for (int i = 0; i < resultado.Length; i++)
				{
					if (resultado[i].ToString() == "-")
					{
						rua = resultado.Substring(0, i);
						break;
					}
				}

				int j = 0;
				for (int i = 27; i < resultado.Length; i++)
				{
					if (resultado[i].ToString() == " ")
					{
						j = i;
						break;
					}
					else
					{
						aux += resultado[i];
					}
				}

				this.hdnInicioLimiteNumero.Value = aux;
				aux = string.Empty;

				for (int i = (j + 3); i < resultado.Length; i++)
				{
					if (resultado[i].ToString() == "-")
					{
						break;
					}
					else
					{
						aux += resultado[i];
					}
				}
				this.hdnFinalLimiteNumero.Value = aux;
			}
			else
				rua = resultado;

			return rua;
		}

		#endregion

	}
}